﻿<html DIR="LTR" xmlns:tool="http://www.microsoft.com/tooltip" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:ddue="http://ddue.schemas.microsoft.com/authoring/2003/5" xmlns:MSHelp="http://msdn.microsoft.com/mshelp">
  <head>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CHARSET=utf-8" />
    <META NAME="save" CONTENT="history" />
    <title>Usando pontos de salvamento</title>
    
    <link rel="stylesheet" type="text/css" href="../local/Classic.css">
      
    </link>
    
    <script src="../local/script.js">
      
    </script><script src="../local/script_main.js">&amp;nbsp;</script>
  </head>
  <body>
    <!--Topic built:04/01/2010 05:03:30-->

    
    
    
    
    
    
    
    
    
    <div id="header">
      <table width="100%" id="topTable"><tr>
          <td align="left">
            <span id="headerBold">Usando pontos de salvamento</span>
          </td>
          <td align="right">
            
          </td>
        </tr></table>
      
      
      
    </div>
    <div id="mainSection">
      
        
        
    <font color="DarkGray">
      
    </font>
    <p />
    
    <p />
  
        <div id="introductionSection" class="section">
    <p>Os pontos de salvamento oferecem um mecanismo para reverter partes de transações. No SQL Server, é possível criar um ponto de salvamento usando a instrução SAVE TRANSACTION nome_do_ponto_de_salvamento. Posteriormente, você executa uma instrução ROLLBACK TRANSACTION nome_do_ponto_de_salvamento para reverter ao ponto de salvamento em vez de reverter ao início da transação. </p>
    <p>Os pontos de salvamento são úteis em situações onde erros são improváveis. O uso de um ponto de salvamento para reverter parte de uma transação na ocorrência de um erro não frequente pode ser mais eficiente do que testar cada transação para verificar se uma atualização é válida antes de fazer a atualização. As atualizações e reversões são operações caras, portanto, pontos de salvamento só serão eficientes se a probabilidade de encontrar o erro for baixa e o custo de verificar a validade de uma atualização com antecedência for relativamente alto.</p>
    <p>O Microsoft SQL Server JDBC Driver dá suporte ao uso de pontos de salvamento por meio do método <a href="c39c6b4f-b9e2-423b-94ae-9f82d9e6d08d.htm">setSavepoint</a> da classe <a href="937292a6-1525-423e-a2b2-a18fd34c2893.htm">SQLServerConnection</a>. Usando o método <b>setSavepoint</b>, você pode criar um ponto de salvamento nomeado ou sem nome na transação atual, e o método retornará um objeto <a href="1ae7db7b-959f-4142-8d9f-aa427869c6ac.htm">SQLServerSavepoint</a>. Podem ser criados vários pontos de salvamento em uma transação. Para reverter uma transação a um determinado ponto de salvamento, você pode passar o objeto <b>SQLServerSavepoint</b> para o método <a href="d5dbd9ef-194f-4130-bfcc-7901a4fa8ded.htm">rollback (java.sql.Savepoint)</a>.</p>
    <p>No exemplo a seguir, um ponto de salvamento é usado durante a execução de uma transação local que consiste em duas instruções separadas no bloco <code>try</code>. As instruções são executadas na tabela Production.ScrapReason do banco de dados de exemplo SQL Server 2005 AdventureWorks e um ponto de salvamento é usado para reverter a segunda instrução. Isso faz com que apenas a primeira instrução seja confirmada no banco de dados.</p>
    <div class="sampleCode"><span codeLanguage="other"><pre>public static void executeTransaction(Connection con) {
   try {
      con.setAutoCommit(false);
      Statement stmt = con.createStatement();
      stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Correct width')");
      Savepoint save = con.setSavepoint();
      stmt.executeUpdate("INSERT INTO Production.ScrapReason(Name) VALUES('Wrong width')");
      con.rollback(save);
      con.commit();
      stmt.close();
      System.out.println("Transaction succeeded.");
   }
   catch (SQLException ex) {
      ex.printStackTrace();
      try {
         System.out.println("Transaction failed.");
         con.rollback();
      }
      catch (SQLException se) {
         se.printStackTrace();
      }
   }
}
</pre></span></div>
  </div><span id="seeAlsoSpan"><h1 class="heading">Consulte também</h1></span><div id="seeAlsoSection" class="section" name="collapseableSection"><a href="afbb776f-05dc-4e79-bb25-2c340483e401.htm">Executando transações com o JDBC Driver</a><br /><br /></div><!--[if gte IE 5]>
			<tool:tip element="seeAlsoToolTip" avoidmouse="false"/><tool:tip element="languageFilterToolTip" avoidmouse="false"/><tool:tip element="roleInfoSpan" avoidmouse="false"/>
		<![endif]-->
      <div id="footer" class="section">
        
		<hr />
		
		<span id="fb" class="feedbackcss">
			
			
		</span>
		
		<a href="9bad553b-9e70-4696-8499-2e35f772a1e0.htm">
			
			© 2010 Microsoft Corporation. Todos os direitos reservados.
		</a>
 	
	
      </div>
    </div>
  </body>
</html>